package com.cacche.thread;


/**
 * @Title: Task.java
 * @Package thread
 * @Description: TODO(添加描述)
 * @author 刘章
 * @date 2013-7-2 下午2:34:22
 */
/**
 * 所有任务接口
 * 其他任务必须继承访类
 * 
 * @author obullxl
 */
public abstract class ThreadTask
        implements
        Runnable
{
	/* 提交执行时间 */
	private long   submitTime       = 0;
	/* 开始执行时间 */
	private long   beginExceuteTime = 0;
	/* 执行完成时间 */
	private long   finishTime       = 0;
	
	private String taskId;
	
	public ThreadTask() {
		this.submitTime = System.currentTimeMillis();
	}
	
	/**
	 * 任务执行入口
	 */
	public void run() {
		ThreadPool.getInstance().batchAddTask(TaskCore());
	}
	
	/**
	 * 所有任务的核心 所以特别的业务逻辑执行之处
	 * 
	 * @throws Exception
	 */
	public abstract ThreadTask[] TaskCore();
	
	/**
	 * 是否需要立即执行
	 * 
	 * @return
	 */
	protected abstract boolean needExecuteImmediate();
	
	/**
	 * 任务信息
	 * 
	 * @return String
	 */
	public abstract void log(int index);
	
	
	public long getSubmitTime() {
		return submitTime;
	}
	
	public long getBeginExceuteTime() {
		return beginExceuteTime;
	}
	
	public void setBeginExceuteTime() {
		this.beginExceuteTime = System.currentTimeMillis();
	}
	
	public long getFinishTime() {
		return finishTime;
	}
	
	public void setFinishTime() {
		this.finishTime = System.currentTimeMillis();
	}
	
	public String getTaskId() {
		return taskId;
	}
	
	public void setTaskId(String taskId) {
		this.taskId = taskId;
	}
	
}
